<?php
/**
 * Classe controladora de admin de contratos
 * @author Emanuel Melo
 */
class contratos extends PC4_Controlador_CRUDAdmin {
	
	protected $mEstudante, $mOferta;
	
	function __construct() {
		parent::__construct(array(new Filtro_Admin_Empresa()));
		$modelo = new PC4_Crud_Abstrato('contratos');
		$this->init($modelo, 'admin/contratos');
		$this->layout->view = 'empresa';

		$this->mEstudante = new PC4_Crud_Abstrato('estudantes_view');
		$this->mOferta = new PC4_Crud_Abstrato('ofertas');
	}
	
	function index() {
		$this->db->select('e.id, e.nome');
		$this->db->join('estudantes_rel_competencias erc', 'erc.id_estudantes = e.id', 'inner');
		// Estudantes
		$this->db->where(
			array(
				'erc.id_competencias IN ' => '(SELECT orc.id_competencias FROM ofertas_rel_competencias orc INNER JOIN ofertas o ON o.id = orc.id_ofertas WHERE o.id_empresas = ' . $this->usuario['id'] . ')',
				'e.id NOT IN ' => '(SELECT cs.id_estudantes FROM contratos cs INNER JOIN ofertas o ON o.id = cs.id_ofertas WHERE o.id_empresas = ' . $this->usuario['id'] . ' AND cs.ativo = 1)'
			),
			null, false
		);
		$this->db->group_by('e.id');
		$rsEstudantes = $this->mEstudante->olista('e.nome');
		// Ofertas
		$this->db->where(array('o.id NOT IN' => '(SELECT c.id_ofertas FROM contratos c WHERE o.id_empresas = ' . $this->usuario['id'] . ' AND c.ativo = 1 AND o.vagas < 1)'), null, false);
		$rsOfertas = $this->mOferta->oconsulta(array('o.id_empresas' => $this->usuario['id']), 'o.nome');
		
		$this->selectboxes($rsEstudantes, $rsOfertas);
		parent::index();
	}
	
	/**
	 * Monta os array de selectbox
	 * @param array $rsEstudantes registros de estudantes
	 * @param array $rsOfertas registros de ofertas
	 */	
	protected function selectboxes($rsEstudantes, $rsOfertas) {
		$estudantes = array('' => 'Selecione...');
		foreach ($rsEstudantes as $r) {
			$estudantes[$r->id] = $r->nome;
		}
		$ofertas = array('' => 'Selecione...');
		foreach ($rsOfertas as $r) {
			$ofertas[$r->id] = $r->nome;
		}
		$this->dados['estudantes'] = $estudantes;
		$this->dados['ofertas'] = $ofertas;
	}
	
	protected function trataForm($id = 0) {
		$campos = parent::trataForm($id);
		$campos['data_inicio'] = date2sql($campos['data_inicio']);
		$campos['previsao_termino'] = date2sql($campos['previsao_termino']);
		return $campos;
	}
	
	function trataNovo() {
		$campos = $this->trataForm();
		$retorno = $this->modelo->insere($campos);
		if (is_numeric($retorno)) {
			$mOferta = new PC4_Crud_Abstrato('ofertas');
			$retorno = $mOferta->edita(array('vagas' => '(vagas - 1)'), $campos['id_ofertas']);
			$this->resultadoEdita($retorno, $campos);
		}
		else {
			$this->resultadoNovo($retorno, $campos);
		}
	}
	
	function edita($id, $campo = 'id') {
		$this->db->select('e.id, e.nome');
		$this->db->join('estudantes_rel_competencias erc', 'erc.id_estudantes = e.id', 'inner');
		// Estudantes
		$this->db->where(
			array(
				'erc.id_competencias IN ' => '(SELECT orc.id_competencias FROM ofertas_rel_competencias orc INNER JOIN ofertas o ON o.id = orc.id_ofertas WHERE o.id_empresas = ' . $this->usuario['id'] . ')'
			),
			null, false
		);
		$this->db->group_by('e.id');
		$rsEstudantes = $this->mEstudante->olista('e.nome');
		// Ofertas
		$rsOfertas = $this->mOferta->oconsulta(array('o.id_empresas' => $this->usuario['id']), 'o.nome');
		
		$this->selectboxes($rsEstudantes, $rsOfertas);
		parent::edita($id, $campo);
	}
	
	function lista($pagina = 1, $limite = 20) {
		$this->db->select('ev.nome as nome_estudante, o.nome as nome_oferta, c.*');
		$this->db->join('estudantes_view ev', 'ev.id = c.id_estudantes', 'inner');
		$this->db->join('ofertas o', 'o.id = c.id_ofertas', 'inner');
		parent::lista($pagina, $limite);
	}
	
}